<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Module extends CI_Model
{
    /**
     * 添加功能模块
     * @param $name 名称
     * @param $mid 菜单ID
     * @param $sort 排序
     * @param $index 菜单标识
     * @return bool|CI_DB_result
     */
    public function add($name,$mid,$sort,$index)
    {
        return $this->db->insert('module', ['name' => $name, 'mid' => $mid, 'sort' => $sort,'index'=>$index]);
    }


    /**
     * 修改功能模块（名称）
     * @param $moduleId
     * @param $name 名称
     * @param $sort 排序
     * @param $index 菜单标识
     * @return bool|CI_DB_result
     */
    public function mod($moduleId, $name,$sort,$index)
    {

        return $this->db->where('id', $moduleId)->update('module', ['name' => $name ,'sort'=> $sort,'index'=>$index]);
    }


    /**
     * 删除功能模块
     * @param $moduleId
     * @return bool
     */
    public function delete($moduleId)
    {
        // 开启事务
        $this->db->trans_begin();

        // 删除功能模块
        $this->db->delete('module', ['id' => $moduleId]);

        // 删除功能模块接口
        $this->db->delete('moduleRights', ['mid' => $moduleId]);

        // 删除用户组功能模块
        $this->db->delete('roleModule', ['mid' => $moduleId]);

        // 事务提交
        if ($this->db->trans_status() === false) {
            $this->db->trans_rollback();
            return false;
        } else {
            $this->db->trans_commit();
            return true;
        }
    }


    /**
     * 修改用户组菜单
     * @param $roleId
     * @param $menuId
     * @return bool
     */
    public function modMenu($roleId, $menuId)
    {
        // 开启事务
        $this->db->trans_begin();

        // 删除原菜单
        $this->db->delete('roleMenu', ['rid' => $roleId]);

        // 写入新新菜单
        $roleMenu = [];
        foreach ($menuId AS $i) {
            $roleMenu[] = ['rid' => $roleId, 'mid' => $i];
        }
        $this->db->insert_batch('roleMenu', $roleMenu);

        // 事务提交
        if ($this->db->trans_status() === false) {
            $this->db->trans_rollback();
            return false;
        } else {
            $this->db->trans_commit();
            return true;
        }
    }


    /**
     * 删除功能模块接口
     * @param $moduleId
     * @param $rightId
     * @return CI_DB_result|mixed
     */
    public function delRight($moduleId, $rightId)
    {
        return $this->db->where('mid', $moduleId)->where_in('rid', $rightId)->delete('moduleRights');
    }


    /**
     * 添加功能模块接口
     * @param $moduleId
     * @param $rightId
     * @return CI_DB_result|int
     * @throws MyException
     */
    public function addRight($moduleId, $rightId)
    {
        if (empty($rightId)) {
            throw new MyException('', MyException::INPUT_MISS);
        }

        $moduleRights = [];
        foreach ($rightId AS $i) {
            $moduleRights[] = ['mid' => $moduleId, 'rid' => $i];
        }
        return $this->db->insert_batch('moduleRights', $moduleRights);
    }

}